package com.galaxy.device.domain.vo;

import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableField;
import com.galaxy.common.mybatis.core.domain.BaseEntity;
import com.galaxy.device.domain.DeviceChannel;
import com.galaxy.device.domain.DeviceLocation;
import com.galaxy.device.domain.DeviceEs;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.elasticsearch.common.geo.GeoPoint;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 设备位置视图对象
 */
@Data
@AutoMapper(target = DeviceLocation.class)
public class DeviceLocationVo {

    /**
     * 主键
     */
    private Long id;

    /**
     * 设备ID
     */
    private Long deviceId;

    /**
     * 位置描述
     */
    private String location;

    /**
     * 详细地址
     */
    private String address;

    /**
     * 纬度
     */
    private BigDecimal latitude;

    private Long status;

    /**
     * 经度
     */
    private BigDecimal longitude;

    @TableField(exist = false)
    private DeviceBaseVo device;

    /**
     * 转换为ES对象
     *
     * @return ES对象
     */
    public DeviceEs toDeviceEs() {
        DeviceEs deviceEs = new DeviceEs();
        deviceEs.setDeviceId(String.valueOf(this.deviceId));
        if (this.device != null) {
            deviceEs.setDeviceName(this.device.getDeviceName());
            // 如果DeviceBaseVo中有站点信息，可以在这里设置
             deviceEs.setSiteId(String.valueOf(this.getId()));
             deviceEs.setSiteName(this.getLocation()+" "+this.getAddress());
        }
        // 设置地理位置
        if (this.latitude != null && this.longitude != null) {
            deviceEs.setLocation(new GeoPoint(this.latitude.doubleValue(), this.longitude.doubleValue()));
        }
        // 设置时间
        deviceEs.setCreateTime(LocalDateTime.now().toString());
        deviceEs.setUpdateTime(LocalDateTime.now().toString());
        return deviceEs;
    }

    /**
     * 判断是否有效
     *
     * @return 是否有效
     */
    public boolean isValid() {
        return this.deviceId != null && this.latitude != null && this.longitude != null;
    }
}
